#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF=1e12;
const int MAXN=4e5+5;
LL dir[MAXN];
struct node {
	int num;
	LL sum;__int128 suml,sumr;
	friend node operator+(node x,node y) {
		return node{x.num+y.num,x.sum+y.sum,x.suml+y.suml+(__int128)x.sum*y.num,x.sumr+y.sumr+(__int128)y.sum*x.num};
	}
}d[MAXN<<2];
struct Segment_Tree {
	void modify(int l,int r,int k,int p) {
		if(l==r) {
			d[p].num^=1;
			d[p].sum=d[p].suml=d[p].sumr=d[p].num*dir[k];
			return;
		}
		int mid=(l+r)>>1;
		if(k<=mid) modify(l,mid,k,p<<1);
		else modify(mid+1,r,k,p<<1|1);
		d[p]=d[p<<1]+d[p<<1|1];
	}
	LL queryl(int l,int r,int k,int p) {
		if(d[p].num<=k) return d[p].sum;
		int mid=(l+r)>>1;
		if(k<=d[p<<1].num) return queryl(l,mid,k,p<<1);
		return d[p<<1].sum+queryl(mid+1,r,k-d[p<<1].num,p<<1|1);
	}
	LL queryr(int l,int r,int k,int p) {
		if(d[p].num<=k) return d[p].sum;
		int mid=(l+r)>>1;
		if(k<=d[p<<1|1].num) return queryr(mid+1,r,k,p<<1|1);
		return d[p<<1|1].sum+queryr(l,mid,k-d[p<<1|1].num,p<<1);
	}
	LL query(int l,int r,int ql,int qr,int p) {
		if(l>=ql&&r<=qr) return d[p].sum;
		int mid=(l+r)>>1;
		if(qr<=mid) return query(l,mid,ql,qr,p<<1);
		if(ql>mid) return query(mid+1,r,ql,qr,p<<1|1);
		return query(l,mid,ql,qr,p<<1)+query(mid+1,r,ql,qr,p<<1|1);
	}
	node Query(int l,int r,int ql,int qr,int p) {
		if(l>=ql&&r<=qr) return d[p];
		int mid=(l+r)>>1;
		if(qr<=mid) return Query(l,mid,ql,qr,p<<1);
		if(ql>mid) return Query(mid+1,r,ql,qr,p<<1|1);
		return Query(l,mid,ql,qr,p<<1)+Query(mid+1,r,ql,qr,p<<1|1);
	}
	int find(int l,int r,int k,int p) {
		if(l==r) return l;
		int mid=(l+r)>>1;
		if(d[p<<1].num>=k) return find(l,mid,k,p<<1);
		return find(mid+1,r,k-d[p<<1].num,p<<1|1); 
	}
}SGT;
LL a[MAXN];
int T,n,m;
signed main() {
	freopen("kte.in","r",stdin);
	freopen("kte.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>T;
	for(int i=1;i<=T;++i) cin>>a[i],dir[i]=a[i];
	sort(dir+1,dir+1+T);
	m=unique(dir+1,dir+1+T)-dir-1;
	for(int i=1;i<=T;++i) {
		int x=lower_bound(dir+1,dir+1+m,a[i])-dir;
		SGT.modify(1,m,x,1);
		n=d[1].num;int Mid=n/2;
		if(n==1) cout<<0<<endl;
		else if(SGT.queryl(1,m,Mid+1,1)-SGT.queryr(1,m,Mid,1)>=0) {
			__int128 ans=d[1].sum;
			node tmp=SGT.Query(1,m,1,m,1);
			ans-=tmp.suml;
			node pmt=SGT.Query(1,m,SGT.find(1,m,2,1),m,1);
			ans+=pmt.sumr;
			cout<<(LL)ans<<endl;
		}
		else {
			LL pmt;
			node tmp;
			int l,r,idx,ind;
			l=0,r=Mid,idx=0;
			while(l<=r) {
				int mid=(l+r)>>1;
				if(SGT.queryl(1,m,mid+1,1)-SGT.queryr(1,m,mid,1)>=0) l=mid+1,idx=mid;
				else r=mid-1;
			}
			__int128 ans=d[1].sum;
			tmp=SGT.Query(1,m,1,SGT.find(1,m,idx+1,1),1),ans-=tmp.suml;
			if(idx!=0) tmp=SGT.Query(1,m,SGT.find(1,m,n-idx+1,1),m,1),ans+=tmp.sumr;
			assert(Mid+1<n);
			l=Mid+1,r=n-1,idx=0;
			while(l<=r) {
				int mid=(l+r)>>1;
				if(SGT.queryl(1,m,mid+1,1)-SGT.queryr(1,m,mid,1)>=0) r=mid-1,idx=mid;
				else l=mid+1;
			}
			ind=SGT.find(1,m,idx+1,1);
			tmp=SGT.Query(1,m,ind,m,1),ans-=tmp.suml;
			pmt=SGT.query(1,m,1,ind-1,1),ans-=(__int128)pmt*(n-idx);
			ind=SGT.find(1,m,n-idx+1,1);
			tmp=SGT.Query(1,m,SGT.find(1,m,2,1),ind,1),ans+=tmp.sumr;
			pmt=SGT.query(1,m,ind+1,m,1),ans+=(__int128)pmt*(n-idx);
			cout<<(LL)ans<<endl;
		}
	}
	return 0;
}
